package algo3.juegoCarmenSanDiego.vista;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.List;

import algo3.juegoCarmenSanDiego.modelo.Ciudad;
import algo3.juegoCarmenSanDiego.modelo.Edificio;
import algo3.juegoCarmenSanDiego.modelo.Interpol;
import algo3.juegoCarmenSanDiego.modelo.Juego;
import algo3.juegoCarmenSanDiego.modelo.TipoEdificioEnum;

public class Mostrador {

	public Mostrador(Juego unJuego) {
	}
	public void mostrar(String unMensaje){
		System.out.println(unMensaje);
	}
	public void pantallaInicio(String objetoRobado, String ciudadInicio) throws IOException{
		this.mostrar("Nuevo caso.");
		this.mostrar("Objeto robado: " + objetoRobado);
		this.mostrar("El caso comienza en la ciudad: " + ciudadInicio);
		this.mostrar("");
		
	}
	public TipoEdificioEnum queElUsuarioElijaUnEdificioDisponible(List<Edificio> edificios) throws IOException{
		this.mostrar("Por favor elija que edificio visitar para buscar pistas: ");
		this.mostrar("Seleccione una opcion: ");
		for (int i = 0; i < edificios.size(); i++){
			this.mostrar("["+ (i+1)+"]:" + edificios.get(i).getTipoDeEdificio().toString());
		}
		InputStreamReader in=new InputStreamReader(System.in);
	    BufferedReader br=new BufferedReader(in);
	    String lectura=br.readLine();
	    int numeroEntero = Integer.valueOf(lectura);
	    return edificios.get(numeroEntero-1).getTipoDeEdificio();
	}
	public void mostrarPista(String pista) {
		this.mostrarEspacios();
		this.mostrar("Pista: " + pista);
				
	}
	private int capturarTeclado() throws NumberFormatException, Exception{
		InputStreamReader in=new InputStreamReader(System.in);
	    BufferedReader br=new BufferedReader(in);
	    String lectura = br.readLine();
	    int numeroIngresado;
	    numeroIngresado = Integer.valueOf(lectura);
	    return numeroIngresado;
	}
	private String capturarLinea() throws IOException{
		InputStreamReader in=new InputStreamReader(System.in);
	    BufferedReader br=new BufferedReader(in);
	    return br.readLine(); 
	}
	
	public void mostrarDestino(Ciudad ciudad){
		this.mostrar("Proximo destino: " + ciudad.getNombreDeCiudad());
	}
	public int opcionesPrincipales() throws NumberFormatException, Exception {
		this.mostrar("Por favor elija una opcion:");
		this.mostrar("");
		this.mostrar("[1]: Nuevo Caso.");
		this.mostrar("[2]: Salir Del Juego.");
		//aca hay que validar que si se ingresa una letra pida que se ingrese de nuevo
		int captura = this.capturarTeclado();

		return captura;
	}
	public int opcionesDelCaso() throws NumberFormatException, Exception {
		this.mostrar("Por favor elija una opcion:");
		this.mostrar("");
		this.mostrar("[1]: Pedir pistas.");
		this.mostrar("[2]: Viajar.");
		this.mostrar("[3]: Crimen.");
		this.mostrar("[4]: Salir del caso.");
		//aca hay que validar que si se ingresa una letra pida que se ingrese de nuevo
		int captura = this.capturarTeclado();

		return captura;
	}
	public int menuPistas(List<Edificio> edificios) throws NumberFormatException, Exception {
		this.mostrarEspacios();
		this.mostrar("Por favor elija que edificio visitar para buscar pistas: ");
		this.mostrar("Seleccione una opcion: ");
		for (int i = 0; i < edificios.size(); i++){
			this.mostrar("["+ (i+1)+"]:" +  edificios.get(i).getTipoDeEdificio().toString());
		}
		this.mostrar("[0]:Salir al menu anterior.");
		int numeroEntero = this.capturarTeclado();
		return numeroEntero;
		
	}
	public int menuViajar(List<Ciudad> ciudades) throws NumberFormatException, Exception {
		this.mostrarEspacios();
		this.mostrar("Por favor, elija una ciudad a la cual viajar");
		for (int i = 0; i < ciudades.size(); i++){
			this.mostrar("["+ (i+1)+"]:" + ciudades.get(i).getNombreDeCiudad());
		}
		this.mostrar("[0]:Salir al menu anterior");
		int numeroEntero = this.capturarTeclado();
		return numeroEntero;
	}
	public void mostrarTiempoRestante(int tiempoRestante) {
		this.mostrar("Tiempo restante: "+ tiempoRestante);
		
	}
	public void mostrarCiudadActual(Ciudad ciudadDelPolicia) {
		this.mostrar("Ciudad Actual: "+ ciudadDelPolicia.getNombreDeCiudad());
		
	}
	
	public int menuCrimen(Interpol interpol) throws NumberFormatException, Exception{
		this.mostrarEspacios();
		this.mostrar(" Seleccione aquellas caracteristicas que quiera modificar.");
		this.mostrar("[1]: Sexo: " + interpol.getSospechosoSexo());
		this.mostrar("[2]: Hobby: " + interpol.getSospechosoHobby());
		this.mostrar("[3]: Pelo: "+ interpol.getSospechosoPelo());
		this.mostrar("[4]: Senia: "+ interpol.getSospechosoSenia());
		this.mostrar("[5]: Coche: " + interpol.getSospechosoCoche());
		this.mostrar("");
		this.mostrar("[6]: Ver ladrones con esas caracteristicas.");
		this.mostrar("[7]: Emitir orden de arresto.");
		this.mostrar("[0]: Salir al menu anterior.");
		return this.capturarTeclado();
	}

	public String cambiarAtributo(String nombreAtributo, List<String> caracteristicas) throws NumberFormatException, Exception {
		this.mostrarEspacios();
		this.mostrar("Seleccione " + nombreAtributo + ": ");
		for(int i=0; i < caracteristicas.size();i++)
			this.mostrar("["+ (i+1) +"]: " + caracteristicas.get(i));
		return caracteristicas.get(this.capturarTeclado()-1);
	}
	public void menuVerSospechosos(List<String> ladrones) {
		this.mostrarEspacios();
		if (ladrones.size() == 0){
			this.mostrar("No se emitio orden de arresto");
		}
		else{
			this.mostrar("Los ladrones que coinciden con las caracteristicas que tiene son: ");
			for(int i=0; i < ladrones.size();i++)
				this.mostrar(ladrones.get(i));
		}
	}
	public void menuOrdenArresto(boolean arrestoEmitido) {
		this.mostrarEspacios();
		if (arrestoEmitido)
			this.mostrar("Orden emitida correctamente");
		else
			this.mostrar("Orden no creada, hay mas de un ladron, o ninguno con los datos ingresados");
	}
	public void mostrarEspacios(){
		for (int i = 0; i<5; i++)
			this.mostrar("");
	}
	public String PedirNombre() throws IOException {
		this.mostrar("Por favor ingrese su nombre: ");
		return this.capturarLinea();
	}
	public void menuJugadorExiste(String nombre, String rangoPolicia) {
		this.mostrar("Bienvenido " +nombre +", usted ya se encuentra en nuestra base de datos.");
		this.mostrar("Su rango de policia es: "+ rangoPolicia);
	}
	public void menuJugadorNuevo(String nombre, String rangoPolicia) {
		this.mostrar("Bienvenido " +nombre +". Usuario nuevo.");
		this.mostrar("Su rango de policia es: " + rangoPolicia);
		this.mostrar("Comienzo del juego.");
	}
	public void mostrarTitulo() {
		this.mostrar("");
		this.mostrar("CARMEN SAN DIEGO\n");
		this.mostrar("");
	}
	public void ingresarOpcionValida() {
		this.mostrar("");
		this.mostrar("Por favor, ingrese una opcion valida.");
		this.mostrar("");
	}
}
